package main

// 139. 单词拆分
func main() {
	s := "leetcode"
	wordDict := []string{"l", "eet", "code"}
	b := wordBreak(s, wordDict)
	println(b)
}

func wordBreak(s string, wordDict []string) bool {
	res := make([]bool, len(s)+1)
	res[0] = true

	for i := 1; i <= len(s); i++ {
		canCombo := false
		for _, word := range wordDict {
			//bool1 := i-len(word) >= 0
			//bool2 := false
			//bool3 := false
			//if bool1 {
			//	bool2 = res[i-len(word)]
			//	strSlice := s[i-len(word) : i]
			//	bool3 = word == strSlice
			//}
			//if bool1 && bool2 && bool3 {
			if i-len(word) >= 0 && res[i-len(word)] && word == s[i-len(word):i] {
				canCombo = true
				break
			}
		}
		res[i] = canCombo
	}

	return res[len(s)]
}

/**
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。

注意：不要求字典中出现的单词全部都使用，并且字典中的单词可以重复使用。

示例 1：

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。
示例 2：

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。
     注意，你可以重复使用字典中的单词。
示例 3：

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

提示：

1 <= s.length <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
s 和 wordDict[i] 仅由小写英文字母组成
wordDict 中的所有字符串 互不相同
*/
